home *** CD-ROM | disk | FTP | other *** search
- /************************************************************************/
- /* netmisc.c */
- /* */
- /* Networking functions of miscellaneous type. */
- /************************************************************************/
-
- /************************************************************************/
- /* history */
- /* */
- /* 86Aug20 HAW History not maintained due to space problems. */
- /************************************************************************/
-
- #include "ctdl.h"
-
- /************************************************************************/
- /* contents */
- /* */
- /************************************************************************/
-
- /************************************************************************/
- /* External variable declarations in NET.C */
- /************************************************************************/
- #ifdef NET_BUG
- FILE *localcheck;
- #endif
- FILE *netLog, *netMisc;
- char logNetResults = FALSE;
- ulong roomHiMsgs[MAXROOMS];
- char inNet = FALSE;
- unsigned char sectBuf[SECTSIZE + 5];
- int counter;
- int callSlot;
- int FinHour, FinMinute;
- label normed, callerName, callerId;
-
- int noKill, errCount = 0;
-
- char normId(), getNetMessage();
- char callOut();
- unsigned char inp();
-
- static char *SupportedBauds[] = { "300", "300/1200", "300/1200/2400" };
- struct nodeRoomsTab *sharedRooms;
-
- /************************************************************************/
- /* External variable definitions for NET.C */
- /************************************************************************/
- extern struct config cfg; /* Lots an lots of variables */
- extern struct logBuffer logBuf; /* Person buffer */
- extern struct aRoom roomBuf; /* Room buffer */
- extern struct rTable roomTab[];
- extern struct msgB msgBuf,tempMess;
- extern struct netBuffer netBuf;
- extern struct netTable *netTab;
- extern FILE *upfd;
- extern int thisNet;
- extern char onConsole;
- extern char loggedIn; /* Is we logged in? */
- extern char outFlag; /* Output flag */
- extern char haveCarrier; /* Do we still got carrier? */
- extern unsigned char modStat; /* Needed so we don't die */
- extern char usingWCprotocol;/* WC flag */
- extern char WCError;
- extern int thisRoom;
- extern int thisLog;
- extern char *dotdot;
- extern char *confirm;
-
- /************************************************************************/
- /* External function definitions for NET.C */
- /************************************************************************/
- FILE *safeopen();
- FILE *fopen();
- char *realloc();
- char *index();
- long getNumber();
-
- /************************************************************************/
- /* netSingleSend() Send a file via WC */
- /************************************************************************/
- sendWCFile(fd)
- FILE *fd;
- {
- int data;
-
- if (doWC(STARTUP)) {
- while ((data = fgetc(fd)) != EOF && data != -1)
- if (!sendWCChar(data)) break;
- doWC(FINISH);
- }
- fclose(fd);
- }
-
- /************************************************************************/
- /* increment() */
- /************************************************************************/
- increment(c)
- unsigned char c;
- {
- sectBuf[counter++] = c;
- if (counter > SECTSIZE+2) {
- interpret(cfg.pHangUp);
- modStat = haveCarrier = FALSE;
- }
- return TRUE;
- }
-
- /************************************************************************/
- /* normId() Normalizes a node id. */
- /************************************************************************/
- char normId(source, dest)
- label source, dest;
- {
- while (!isalpha(*source) && *source)
- source++;
- if (!*source) return FALSE;
- *dest++ = toUpper(*source++);
- while (!isalpha(*source) && *source)
- source++;
- if (!*source) return FALSE;
- *dest++ = toUpper(*source++);
- while (*source) {
- if (isdigit(*source))
- *dest++ = *source;
- source++;
- }
- *dest = '\0';
- return TRUE;
- }
-
- /************************************************************************/
- /* called_stabilize() Attempts to stabilize communication on */
- /* receiver end. */
- /************************************************************************/
- called_stabilize()
- {
- int Time = 0, f, baudRunner = 0;
- char noGood, notFinished, notDone = TRUE;
- char laterMessage[100];
-
- pause(100); /* Pause a full second */
- while (notDone) {
- noGood = TRUE;
-
- if (cfg.search_baud) {
- while (MIReady()) inp(); /* Clear garbage */
- while (gotCarrier() && noGood && Time < 20) {
- Time++;
- for (notFinished = TRUE; noGood && gotCarrier() && notFinished;){
- interpret(cfg.pBauds[baudRunner]);
- noGood = check_for_init();
- if (cfg.debug) splitF(netLog, ".\n");
- notFinished = !(baudRunner == cfg.sysBaud);
- baudRunner = (baudRunner + 1) % (cfg.sysBaud + 1);
- }
- }
- }
-
- else {
- interpret(cfg.pBauds[interpret(cfg.pCheckBaud)]);
-
- for (; gotCarrier() && Time < 20 && noGood; Time++) {
- noGood = check_for_init();
- if (cfg.debug) splitF(netLog, ".\n");
- }
- if (cfg.debug) splitF(netLog, "\n");
- }
-
- if (!gotCarrier()) {
- modStat = haveCarrier = FALSE;
- splitF(netLog, "Lost carrier\n");
- return FALSE;
- }
-
- if (noGood && Time == 20) {
- outFlag = IMPERVIOUS;
- sPrintf(laterMessage,
- "System will be in network mode for another %d minutes; please call back.\n",
- timeLeft());
- if (cfg.search_baud) {
- for (baudRunner = cfg.sysBaud; baudRunner > -1; baudRunner--) {
- interpret(cfg.pBauds[baudRunner]);
- mPrintf(laterMessage);
- }
- }
- else
- mPrintf(laterMessage);
- interpret(cfg.pHangUp);
- notDone = modStat = haveCarrier = FALSE;
- outFlag = OUTOK;
- }
- else {
- if (cfg.debug) splitF(netLog, "&");
- outMod(~7 );
- outMod(~13);
- outMod(~69);
- f = receive(2);
- if (f == ACK)
- return TRUE ;
- else if (cfg.debug) splitF(netLog, "%d ", f);
-
- if (!gotCarrier())
- modStat = haveCarrier = notDone = FALSE;
- }
- }
- if (!gotCarrier())
- modStat = haveCarrier = FALSE;
- return FALSE;
- }
-
- /************************************************************************/
- /* check_for_init() Looks for networking initialization sequence */
- /************************************************************************/
- check_for_init()
- {
- int count, timeOut;
- unsigned char thisVal, lastVal;
-
- lastVal = 0;
- timeOut = (INTERVALS / 2) * (500);
- for (count = 0; count < timeOut; count++) {
- if (MIReady()) {
- thisVal = inp();
- if (cfg.debug) splitF(netLog, "%d ", thisVal);
- switch (thisVal) {
- case 7: lastVal = 7; break;
- case 13:
- if (lastVal == 7) lastVal = 13;
- else lastVal = 0;
- break;
- case 69:
- if (lastVal == 13) return FALSE;
- else lastVal = 0;
- break;
- default:
- lastVal = 0;
- }
- }
- else shortPause();
- }
- return TRUE;
- }
-
- /************************************************************************/
- /* searchNet() Searches net for the given Id. */
- /************************************************************************/
- searchNet(forId)
- char *forId;
- {
- int rover;
- label temp;
-
- for (rover = 0; rover < cfg.netSize; rover++) {
- if (netTab[rover].ntflags.in_use &&
- hash(forId) == netTab[rover].ntidhash) {
- getNet(rover);
- normId(netBuf.netId, temp);
- if (strCmpU(temp, forId) == SAMESTRING)
- return rover;
- }
- }
- return ERROR;
- }
-
- /************************************************************************/
- /* readMail() Integrates mail into the data base */
- /************************************************************************/
- readMail(zap, procFn)
- char zap;
- int (*procFn)();
- {
- label tempNm;
-
- strCpy(tempNm, "a:tempmail.$$$");
- tempNm[0] = cfg.netDisk + 'a';
- if ((netMisc = safeopen(tempNm, "rb")) == NULL) {
- no_good("Couldn't open tempmail file from %s.", TRUE);
- return;
- }
- getRoom(MAILROOM);
- noKill = FALSE;
- while (getNetMessage()) {
- if (strCmpU(cfg.nodeId + cfg.codeBuf, tempMess.mborig) != SAMESTRING)
- /* inMail(); */
- (*procFn)();
- }
- fclose(netMisc);
- if (zap && !noKill) unlink(tempNm);
- else if (zap) {
- sPrintf(msgBuf.mbtext, "%c:temp%d.$$$", cfg.netDisk + 'a', errCount++);
- rename(tempNm, msgBuf.mbtext);
- }
- }
-
- /************************************************************************/
- /* getNetMessage() gets a message from a global file */
- /************************************************************************/
- char getNetMessage()
- {
- int marker, c;
-
- zero_struct(tempMess);
- marker = 0;
- while (marker != 'M') {
- while ((marker = getc(netMisc)) != -1 && marker == ' ')
- ;
- if (marker == -1) {
- return FALSE;
- }
- switch (marker) {
- case 'A':
- getNetStr(tempMess.mbauth);
- break;
- case 'D':
- getNetStr(tempMess.mbdate);
- break;
- case 'N':
- getNetStr(tempMess.mboname);
- break;
- case 'O':
- getNetStr(tempMess.mborig);
- break;
- case 'R':
- getNetStr(tempMess.mbroom);
- break;
- case 'S':
- getNetStr(tempMess.mbsrcId);
- break;
- case 'T':
- getNetStr(tempMess.mbto);
- break;
- case 'C':
- getNetStr(tempMess.mbtime);
- break;
- default:
- if (marker != 'M')
- while ((c = getc(netMisc)) != -1 && c != '\0')
- ;
- break;
- }
- }
- getNetStr(tempMess.mbtext);
- return TRUE;
- }
-
- /************************************************************************/
- /* getNetStr() gets a string from networked message */
- /************************************************************************/
- getNetStr(place)
- char *place;
- {
- int i, c;
-
- i = 0;
- do {
- c = getc(netMisc);
- if (c == '\r') c = '\n';
- place[i++] = c;
- } while (c != -1 && c != '\0');
- }
-
- /************************************************************************/
- /* inMail() integrates mail into database */
- /************************************************************************/
- inMail()
- {
- int logNo;
- struct logBuffer lBuf;
-
- if (!tempMess.mbto[0]) {
- splitF(netLog, "'to' error\n");
- noKill = TRUE;
- return ;
- }
- logNo = findPerson(tempMess.mbto, &lBuf);
- strCpy(msgBuf.mbto, tempMess.mbto);
- if (logNo == ERROR && hash(tempMess.mbto) != hash("Sysop")) {
- splitF(netLog, "Mail to '%s' cannot be delivered.\n", tempMess.mbto);
- return;
- }
- else splitF(netLog, "Delivering mail to '%s'\n", tempMess.mbto);
- if (strCmpU(tempMess.mbto, "sysop") != 0)
- strCpy(tempMess.mbto, lBuf.lbname);
- putNetMessage();
- noteMessage(&lBuf, logNo);
- }
-
- /************************************************************************/
- /* netController() Handles the net stuff */
- /************************************************************************/
- netController()
- {
- int x;
- int searcher = 0, start, first;
- label name;
- ulong waitTime, count;
- int yr, hr, min, dy;
- char *mn;
-
- getdate(&yr, &mn, &dy, &hr, &min);
-
- if (logNetResults) {
- sPrintf(name, "%c:netlog.sys", cfg.homeDisk + 'a');
- netLog = fopen(name, "a");
- }
- else
- netLog = NULL;
-
- inNet = TRUE;
- loggedIn = FALSE; /* Let's be VERY sure. */
- thisLog = -1;
- splitF(netLog, "\n---------------In Networking Mode--------------\n%d%s%02d\n",
- yr, mn, dy);
- modStat = haveCarrier = FALSE;
- setTime();
- initNetRooms();
-
- while ((x = timeLeft()) > 0) { /* "Can we say inefficient?" */
- waitTime = (cfg.catChar % 5) + 1;
- while (waitTime > minimum(5, ((x/2)))) waitTime /= 2;
- /* for (count = 0; count < waitTime * 6000; count++) { */
- for (count = 0; count < waitTime * 6000 && !KBReady(); count++) {
- pause(1);
- if (gotCarrier()) break;
- }
- if(KBReady()) getCh();
- if (gotCarrier()) {
- modStat = haveCarrier = TRUE;
- called();
- }
- if (cfg.netSize != 0) {
- start = searcher;
- do {
- if (needToCall(searcher)) {
- if (callOut(searcher))
- caller();
- for (count = 0; count < 20 && !gotCarrier(); count++)
- /* Give the modem a chance to recover */
- pause(50);
- if (gotCarrier()) {
- modStat = haveCarrier = TRUE;
- called();
- }
- }
- searcher = (searcher + 1) % cfg.netSize;
- } while ((searcher+1) % cfg.netSize != start);
- }
- }
- splitF(netLog, "\n---------------Out of Networking Mode--------------\n\n\n");
- for (searcher = 0; searcher < cfg.netSize; searcher++)
- if (needToCall(searcher)) break;
- if (searcher < cfg.netSize) {
- sPrintf(msgBuf.mbtext, "The following systems could not be reached: ");
- for (searcher = 0, first = 1; searcher < cfg.netSize; searcher++)
- if (needToCall(searcher)) {
- if (!first) strCat(msgBuf.mbtext,", ");
- first = FALSE;
- getNet(searcher);
- strCat(msgBuf.mbtext, netBuf.netName);
- }
- strCat(msgBuf.mbtext, ".");
- aideMessage(FALSE);
- }
- free(sharedRooms);
- setSharedRooms();
- interpret(cfg.pInitPort);
- modStat = haveCarrier = FALSE;
- inNet = FALSE;
- if (logNetResults) {
- fclose(netLog);
- }
- }
-
- /************************************************************************/
- /* initNetRooms() Initializes buncha flags 'n things. Kludgey. */
- /************************************************************************/
- initNetRooms()
- {
- int rover, i;
-
- for (rover = 0; rover < cfg.netSize; rover++) {
- getNet(rover);
- if (netBuf.nbflags.in_use) {
- for (i = 0; i < SHARED_ROOMS; i++) {
- resetNeedsProcessing(i);
- }
- putNet(rover);
- }
- }
- }
-
- /************************************************************************/
- /* setTime() Sets up some global variables for the networker */
- /************************************************************************/
- setTime()
- {
- int yr, hr, min, dy;
- char *mn;
-
- getdate(&yr, &mn, &dy, &hr, &min);
- FinHour = hr + cfg.netLength / 60;
- FinMinute = cfg.netLength % 60;
- }
-
- /************************************************************************/
- /* timeLeft() Does a rough estimate of how much time left */
- /************************************************************************/
- int timeLeft()
- {
- int yr, hr, min, dy;
- char *mn;
-
- getdate(&yr, &mn, &dy, &hr, &min);
- if (hr == FinHour && min > FinMinute) return -1;
- if (hr > FinHour) return -1;
- return ((FinHour - hr) * 60 + abs(min - FinMinute));
- }
-
- /************************************************************************/
- /* callOut() Attempts to call some other system. */
- /************************************************************************/
- char callOut(i)
- int i;
- {
- char call[80];
- label blip1;
-
- getNet(callSlot = i);
- strCpy(normed, netBuf.netId); /* Cosmetics */
- strCpy(callerId, netBuf.netId);
- strCpy(callerName, netBuf.netName);
- splitF(netLog, "Calling %s @ %s: ", netBuf.netName, netBuf.netId);
- interpret(cfg.pBauds[minimum(netBuf.baudCode, cfg.sysBaud)]);
- normId(netBuf.netId, blip1);
- strCpy(call, cfg.codeBuf + cfg.netPrefix);
- if (!netBuf.nbflags.local) {
- if (!cfg.longHaul)
- crashout("Supposed to call long distance when LONG-HAUL is 0?");
- strCat(call, "1");
- strCat(call, blip1 + 2);
- }
- else {
- strCat(call, blip1 + 5);
- }
- strCat(call, cfg.codeBuf + cfg.netSuffix);
- moPuts(call);
- for (i = 0; i < 4000; i++) {
- pause(1);
- if (gotCarrier()) break;
- }
- if (gotCarrier())
- return modStat = haveCarrier = TRUE;
-
- outMod('\r'); /* Take SmartModem out of call mode */
- splitF(netLog, "No luck.\n");
- return FALSE;
- }
-
- /************************************************************************/
- /* moPuts() Put a string out to modem without carr check */
- /************************************************************************/
- moPuts(s)
- char *s;
- {
- while (*s) {
- pause(5);
- if (cfg.debug) putchar(*s);
- outMod(*s++);
- }
- }
-
- /************************************************************************/
- /* netMessage() Send message via net */
- /************************************************************************/
- netMessage(uploading)
- char uploading;
- {
- extern char *ALL_LOCALS;
- extern char *R_SH_MARK;
- char notDone = TRUE;
- label sys;
- char *address;
-
- if (!cfg.netParticipant) {
- mPrintf("This Citadel is not participating in the net.\n ");
- return;
- }
-
- zero_struct(msgBuf);
-
- if (!loggedIn || !logBuf.lbflags.NET_PRIVS) {
- mPrintf("Sorry, you don't have net privileges.\n ");
- return;
- }
-
- if (thisRoom == MAILROOM) {
- do {
- getString("system to send to", sys, 20, TRUE, ECHO);
- if (strLen(sys) == 0) return;
- if (sys[0] == '?')
- writeNet(FALSE);
- else {
- if (searchNameNet(sys) == ERROR && strCmpU(sys, ALL_LOCALS) != 0)
- mPrintf("No such system currently part of the net\n ");
- else
- notDone = FALSE;
- }
- } while (notDone);
-
- if (strCmpU(sys, ALL_LOCALS) != 0) {
- getNet(searchNameNet(sys));
- if (!cfg.longHaul && !netBuf.nbflags.local) {
- mPrintf("Sorry, local Citadels only, please.\n ");
- return;
- }
- if (!netBuf.nbflags.local && logBuf.credit == 0) {
- mPrintf("Sorry, you have no credit for long distance net.\n ");
- return;
- }
- address = netBuf.netName;
- }
- else {
- if (!logBuf.lbflags.AIDE) {
- mPrintf("Sorry, you don't have announcement privileges.\n ");
- return;
- }
- address = ALL_LOCALS;
- }
- }
- else {
- if (!roomBuf.rbflags.SHARED) {
- mPrintf("This is not a network room\n ");
- return;
- }
- address = R_SH_MARK;
- strCpy(msgBuf.mboname, cfg.codeBuf + cfg.nodeName);
- }
- strCpy(msgBuf.mbaddr, address);
- procMessage(uploading);
- }
-
- /************************************************************************/
- /* writeNet() write up nodes on the net. */
- /************************************************************************/
- writeNet(idsAlso)
- char idsAlso;
- {
- int rover;
-
- outFlag = OUTOK;
- mPrintf("Systems on the net:\n ");
- for (rover = 0; rover < cfg.netSize; rover++) {
- getNet(rover);
- if (netBuf.nbflags.in_use) {
- mPrintf("%-22s", netBuf.netName);
- if (idsAlso) mPrintf("%-22s%-16s%s", netBuf.netId,
- (needToCall(rover)) ? "<need to call>" : "",
- SupportedBauds[netBuf.baudCode]);
- mPrintf("\n ");
- }
- }
- if (!idsAlso) mPrintf("'&L' == Local Systems Announcement\n ");
- }
-
- /************************************************************************/
- /* searchNameNet() Search net for given node name */
- /************************************************************************/
- searchNameNet(name)
- label name;
- {
- int rover;
-
- for (rover = 0; rover < cfg.netSize; rover++) {
- if (netTab[rover].ntflags.in_use &&
- hash(name) == netTab[rover].ntnmhash) {
- getNet(rover);
- if (strCmpU(netBuf.netName, name) == SAMESTRING)
- return rover;
- }
- }
- return ERROR;
- }
-
- /************************************************************************/
- /* netStuff() Handles networking for the sysop */
- /************************************************************************/
- netStuff()
- {
- extern char *who_str;
- label who;
- struct logBuffer lBuf;
- int logNo;
-
- do {
- outFlag = OUTOK;
- mPrintf("\n Net function: ");
- switch (toUpper(iChar())) {
- case 'R':
- mPrintf("equest File\n ");
- fileRequest();
- break;
- case 'X':
- mPrintf("\bExit to main menu");
- return;
- case 'C':
- mPrintf("redit setting\n ");
- getNormStr(who_str, who, NAMESIZE, ECHO);
- logNo = findPerson(who, &lBuf);
- if (logNo == ERROR) {
- mPrintf("No such person\n ");
- break;
- }
- mPrintf("%s currently has %d credits.", who, lBuf.credit);
- lBuf.credit = (int) getNumber("How many now", 0l, 255l);
- if (loggedIn && strCmpU(logBuf.lbname, who) == SAMESTRING)
- logBuf.credit = lBuf.credit;
-
- putLog(&lBuf, logNo);
-
- break;
- case 'V':
- mPrintf("iew net list\n ");
- writeNet(TRUE);
- break;
- case 'A':
- mPrintf("dd node to net\n ");
- addNetNode();
- break;
- case 'E':
- mPrintf("dit a node\n ");
- editNode();
- break;
- case 'N':
- mPrintf("et privilege toggle\n ");
- getNormStr(who_str, who, NAMESIZE, ECHO);
- logNo = findPerson(who, &lBuf);
- if (logNo == ERROR) {
- mPrintf("No such person\n ");
- break;
- }
- mPrintf(
- "%s has %snet privileges\n ",
- who,
- (lBuf.lbflags.NET_PRIVS) ? "no " : ""
- );
- if (!getYesNo(confirm)) break;
- lBuf.lbflags.NET_PRIVS = !lBuf.lbflags.NET_PRIVS;
- if (strCmpU(lBuf.lbname, logBuf.lbname) == SAMESTRING)
- logBuf.lbflags.NET_PRIVS = lBuf.lbflags.NET_PRIVS;
-
- putLog(&lBuf, logNo);
-
- break;
- case '?':
- tutorial("netopt.mnu");
- break;
- default:
- mPrintf(" ?\n ");
- }
- } while (onLine());
- }
-
- /************************************************************************/
- /* addNetNode() Add a node to the net listing */
- /************************************************************************/
- addNetNode()
- {
- int searcher, i;
- char goodAnswer;
- label temp;
-
- zero_struct(netBuf); /* Useful initialization */
- do {
- getNormStr("System name", netBuf.netName, NAMESIZE, ECHO);
- if (strLen(netBuf.netName) == 0) return;
- if ((goodAnswer = strCmpU(ALL_LOCALS, netBuf.netName)) == 0)
- mPrintf("Sorry, reserved name\n ");
- } while (!goodAnswer);
- getString("System ID", netBuf.netId, NAMESIZE, FALSE, ECHO);
- if (strLen(netBuf.netId) == 0) return;
- netBuf.baudCode = (int) getNumber(
- "Baud code (0=300, 1=300/1200, 2=300/1200/2400)", 0l, 2l);
- netBuf.nbflags.local = getYesNo("Is system local");
- netBuf.nbflags.in_use = TRUE;
-
- for (searcher = 0; searcher < cfg.netSize; searcher++)
- if (netTab[searcher].ntflags.in_use == FALSE) break;
-
- if (searcher != cfg.netSize)
- putNet(searcher);
- else {
- netTab =
- (struct netTable *) realloc(netTab, sizeof (*netTab) * ++cfg.netSize);
- sharedRooms =
- (struct nodeRoomsTab *) realloc(sharedRooms, sizeof (*sharedRooms) *
- cfg.netSize);
- searcher = cfg.netSize - 1;
- putNet(searcher);
- }
- normId(netBuf.netId, temp);
- netTab[searcher].ntnmhash = hash(netBuf.netName);
- netTab[searcher].ntidhash = hash(temp);
- zero_struct(sharedRooms[searcher].rooms);
- }
-
- /************************************************************************/
- /* editNode() Edit a net node */
- /************************************************************************/
- editNode()
- {
- label sysname, temp;
- int place;
-
- getNormStr("Name of system to edit", sysname, NAMESIZE, ECHO);
- if ((place = searchNameNet(sysname)) == ERROR) {
- mPrintf("%s not listed!\n ", sysname);
- return;
- }
- getNet(place);
- mPrintf("\n Node %s:\n Id: %s", netBuf.netName, netBuf.netId);
- mPrintf("\n System is a %slocal system, ",
- (netBuf.nbflags.local) ? "" : "non-");
- mPrintf("and the baud setting is for %s.\n ",
- SupportedBauds[netBuf.baudCode]);
- mPrintf("There is %soutgoing mail, ",
- (netBuf.nbflags.normal_mail) ? "" : "no ");
- mPrintf("and there are %sfile requests outstanding.\n ",
- (netBuf.nbflags.room_files) ? "" : "no ");
- while (1) {
- outFlag = OUTOK;
- mPrintf("\n (%s) edit fn: ", netBuf.netName);
- switch (toUpper(iChar())) {
- case 'Z': dumpNodeRoom(FALSE);
- break;
- case 'X':
- mPrintf("\bExit to net menu");
- normId(netBuf.netId, temp);
- netTab[place].ntnmhash = hash(netBuf.netName);
- netTab[place].ntidhash = hash(temp);
- netTab[place].ntflags.in_use = netBuf.nbflags.in_use;
- putNet(place);
- return;
- case 'B':
- mPrintf("aud code change\n ");
- netBuf.baudCode = (int) getNumber(
- "Baud code (0=300, 1=300/1200, 2=300/1200/2400)", 0l, 2l);
- break;
- case 'N':
- mPrintf("ame change\n ");
- getNormStr("System name", temp, NAMESIZE, ECHO);
- if (strLen(temp) != 0) strCpy(netBuf.netName);
- break;
- case 'I':
- mPrintf("D change\n ");
- getString("System ID", temp, NAMESIZE, FALSE, ECHO);
- if (strLen(temp) != 0) strCpy(netBuf.netId);
- break;
- case 'K':
- mPrintf("ill node from list\n ");
- if (netBuf.nbflags.normal_mail)
- mPrintf("There is outgoing mail outstanding.\n ");
- if (netBuf.nbflags.room_files)
- mPrintf("There are file requests outstanding.\n ");
- if (getYesNo("Confirm")) {
- netBuf.nbflags.in_use = FALSE;
- putNet(place);
- sPrintf(temp, "a:%d.ml", thisNet);
- temp[0] = cfg.netDisk + 'a';
- unlink(temp);
- sPrintf(temp, "a:%d.rfl", thisNet);
- temp[0] = cfg.netDisk + 'a';
- unlink(temp);
- return;
- }
- break;
- case 'L':
- mPrintf("ocal setting\n ");
- netBuf.nbflags.local = getYesNo("Is system local");
- break;
- case '?':
- tutorial("netedit.mnu");
- break;
- default:
- mPrintf("?\n ");
- }
- }
- }
-
- /************************************************************************/
- /* inNetTime() Time to network? */
- /************************************************************************/
- inNetTime(hr, mn)
- int hr, mn;
- {
- int thisHour, thisMin;
-
- thisHour = cfg.netHour + (cfg.netLength / 60);
- thisMin = cfg.netLength - ((thisHour - cfg.netHour) * 60);
- if (hr < cfg.netHour) return FALSE;
- if (hr > thisHour) return FALSE;
- if (mn >= thisMin) return FALSE;
- return TRUE;
- }
-
- /************************************************************************/
- /* fileRequest() For network requests of files. */
- /************************************************************************/
- fileRequest()
- {
- struct fl_req file_data;
- label system, dr, data;
- char loc[100];
- char abort, goodname;
- FILE *temp;
- char *cd, *gcdir();
- int place;
- char ambiguous;
-
- getNormStr("system to request file from", system, NAMESIZE, ECHO);
- if (strLen(system) == 0) return;
- if ((place = searchNameNet(system)) == ERROR) {
- mPrintf("%s not listed!\n ", system);
- return;
- }
- getNet(place);
- sPrintf(loc, "name of room on %s that has desired file", system);
- getNormStr(loc, file_data.room, NAMESIZE, ECHO);
- if (strLen(file_data.room) == 0) return;
- getNormStr("the file(s)'s name", file_data.roomfile, NAMESIZE, ECHO);
- if (strLen(file_data.roomfile) == 0) return;
- ambiguous = !(index(file_data.roomfile, '*') == NULL &&
- index(file_data.roomfile, '?') == NULL);
- getString("what drive you want the file put on", dr, 2, FALSE, ECHO);
- if (strLen(dr) == 0) return;
- file_data.drive = dr[0];
- mPrintf("Now we want to specify the exact directory on drive ");
- mPrintf("%c to place the file in. ", toUpper(dr[0]));
- mPrintf("Type the exact path, from the root.");
- mPrintf(" If you want it in the root directory, then just type ");
- mPrintf("Return. There is some error checking here, but not much.");
- mPrintf(" '?' will abort.");
- abort = FALSE;
- setSpace(toUpper(dr[0]) - 'A', "");
- cd = gcdir("");
- good_path(file_data.path, 98);
- if (file_data.path[1] != '?') {
- if (!ambiguous) {
- chdir(file_data.path);
- do {
- getString("name the file will be stored under on this system",
- file_data.filename, NAMESIZE, FALSE, ECHO);
- if (strLen(file_data.filename) == 0) abort = TRUE;
- else {
- temp = safeopen(file_data.filename, "r");
- if (temp != NULL) {
- fclose(temp);
- mPrintf("'%s' already exists, and ", file_data.filename);
- mPrintf("will be overwritten during networking.");
- goodname = getYesNo("Is this what you want");
- }
- else goodname = TRUE;
- }
- } while (!abort && !goodname);
- }
- else {
- mPrintf("Ambiguous requests may result in overwriting.\n ");
- file_data.filename[0] = 0;
- }
- }
- else abort = TRUE;
-
- chdir(cd);
- free(cd);
- setSpace(cfg.homeDisk, "");
- if (!abort) {
- sPrintf(data, "a:%d.rfl", place);
- data[0] = cfg.netDisk + 'a';
- temp = safeopen(data, "ab");
- if (temp == NULL) {
- mPrintf("Couldn't append to '%s'????", data);
- }
- fwrite(&file_data, sizeof (file_data), 1, temp);
- fclose(temp);
- netBuf.nbflags.room_files = TRUE;
- putNet(place);
- }
- }
-
- /************************************************************************/
- /* roomsShared() Returns true if this system has a room with new */
- /* data to share (orSomething) */
- /************************************************************************/
- roomsShared(slot)
- int slot;
- {
- int i;
-
- for (i = 0; i < SHARED_ROOMS; i++) {
- if (isSharedFlag(slot, i)) {
- if (roomHiMsgs[netTabRoomSlot(slot, i)] >
- sharedRooms[slot].rooms[i].lastMess)
- return TRUE;
- }
- }
-
- return FALSE;
- }
-
- /************************************************************************/
- /* setSharedRooms() Initializes the roomHiMsgs[] array */
- /************************************************************************/
- setSharedRooms()
- {
- ulong findHighestNative();
- char *malloc();
- int rover, i;
-
- sharedRooms = (struct nodeRoomsTab *) malloc(sizeof (*sharedRooms) *
- cfg.netSize);
- for (rover = 0; rover < MAXROOMS; rover++) {
- if (roomTab[rover].rtflags.SHARED)
- roomHiMsgs[rover] = findHighestNative(rover);
- else
- roomHiMsgs[rover] = 0l;
- }
- for (rover = 0; rover < cfg.netSize; rover++) {
- getNet(rover);
- if (netBuf.nbflags.in_use) {
- copy_array(netBuf.netRooms, sharedRooms[rover].rooms);
- }
- }
- }
-
- dumpNodeRoom(file)
- char file;
- {
- #ifdef NET_BUG
- label name;
- int rover;
-
- if (!inNet) {
- if (logNetResults && file) {
- sPrintf(name, "%c:netlog.sys", cfg.homeDisk + 'a');
- netLog = fopen(name, "a");
- }
- else
- netLog = NULL;
- }
-
- splitF(netLog, "-- DEBUG: dump of node %s (#%d) --\n", netBuf.netName,
- thisNet);
- splitF(netLog, "Room list dump:\n");
- for (rover = 0; rover < SHARED_ROOMS; rover++) {
- splitF(netLog, "Slot %d: room#0x%-9xgen=0x%x", rover,
- netBuf.netRooms[rover].srslot,
- netBuf.netRooms[rover].srgen);
- if (netBuf.netRooms[rover].srgen & 0x8000) {
- splitF(netLog, " IN USE apparently\n");
- splitF(netLog, "%9croom is %s, gen is 0x%x\n", ' ',
- roomTab[netRoomSlot(rover)].rtname,
- roomTab[netRoomSlot(rover)].rtgen);
- }
- else splitF(netLog, "\n");
- }
- if (!inNet && logNetResults && file)
- fclose(netLog);
- #endif
- }
-